#include<iostream>

using namespace std;
class Test
{
    public:
        Test()
        {

        }
        
        Test(int t): m_t(t)
        {

        }

        virtual void printInfo()
        {
            cout<<"I am Test"<<endl;
        }
        int m_t;
};

//实现多态的条件：
//1、继承
//2、覆盖函数（基类，子类拥有相同的方法
//3、虚函数:virtual
//4、基类指针或者引用指向派生类的对象
class TestA: public Test
{
    public:
        TestA()
        {

        }

        TestA(int ta):m_ta(ta)
        {

        }
        int m_ta;
};

class TestB: public Test
{
    public:
        TestB()
        {

        }

        TestA(int tb):m_tb(tb)
        {

        }
        int m_tb;
};

int main()
{
    Test t(1);
    TestA ta(2);
    TestB tb(3);

    t=ta;
    cout<<t.m_t<<endl;
    t.printInfo();

    Test *pt=&t;
    Test *pta=&ta;

    pt=pta;
    pt->printInfo();

    pt=&tb;
    pt->printInfo();

    Test &ta=pt;

    
    return 0;
}